package com.promotores;

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;


import com.graficas.LineGraph;
import com.graficas.VentasN1;
import com.promotores.R;
import com.promotores.util.Parametros;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class ActivityVerEstimacion extends Activity  implements OnClickListener{
	Button btnEmail;
	float ftAsistMin;
	float ftAsistMax;
	float ftPrecMin;
	float ftPrecMax;
	float ftPrecMin2;
	float ftPrecMax2;
	
	float factorA;
	float factorP;
	float factorP2;
	float varprecio;
	float varasistencia;
	
	int[] periodo = null;
	int[] ventas = null;
	int[] periodo2 = null;
	int[] ventas2 = null;
	String tituloGrafica;
	String strIdEvento;
	String nombEvento;
	String mailPromotor;
	int flagTipoReporte;
	LinearLayout layoutGrafica = null;
	GraphicalView mChartView = null;
	LineGraph lg = new LineGraph();
	int flag;
//	float capevento = 500;
//	float capeventoaux;
	float CF = 200000;
	float CVu = 100;
	float CVaux;
	float IF = 0;
	float tarifa = 80;
	float IVu;
	float IVaux;
	
	float tarifaaux;
	float PEx;
	float PEy;
	
	int cantPuntos=10;
	

	ArrayList<Float> xCosto = new ArrayList<Float>();
	ArrayList<Float> yCosto = new ArrayList<Float>();
	ArrayList<Float> xAsist1 = new ArrayList<Float>();
	ArrayList<Float> yAsist1 = new ArrayList<Float>();
	ArrayList<Float> xAsist2 = new ArrayList<Float>();
	ArrayList<Float> yAsist2 = new ArrayList<Float>();
	ArrayList<Float> xAsist3 = new ArrayList<Float>();
	ArrayList<Float> yAsist3 = new ArrayList<Float>();
	
	ArrayList<BeanZona> zonas = new ArrayList<BeanZona>();
	//Hasta que tengamos los objetos:
	List<Double> tarifas = new ArrayList<Double>();
	List<Integer> aforos = new ArrayList<Integer>();
	int tarifaTotal=0;
	int aforoTotal=0;
	float IUv = 0;
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		flag = 0;
		// TODO Put your code here
		setContentView(R.layout.pr_verestimacion);
		strIdEvento = this.getIntent().getStringExtra("idEvento");
		nombEvento = this.getIntent().getStringExtra("nombEvento");
		mailPromotor = this.getIntent().getStringExtra("mailPromotor");
		
		TextView txtTitulo = new TextView(this); 
		txtTitulo = (TextView)findViewById(R.id.titNombEvento);
		
//		txtAsistMin = (EditText)findViewById(R.id.txtAsistMin);
//		txtAsistMax = (EditText)findViewById(R.id.txtAsistMax);
//		txtPrecMin = (EditText)findViewById(R.id.txtPrecMin);
//		txtPrecMax = (EditText)findViewById(R.id.txtPrecMax);
    	GestorZona gestorZona = new GestorZona(this);
    	zonas = gestorZona.getAllZonaByEvento(Integer.parseInt(strIdEvento));
//		tarifas.add(80);
//		aforos.add(500);
		for (int i=0; i<zonas.size();i++){
			tarifas.add(zonas.get(i).getFare());
			aforos.add(zonas.get(i).getAforo());
		}
		GestorZona gz = new GestorZona(this);
		zonas = gz.getAllZonaByEvento(Integer.parseInt(strIdEvento));
		
		
		for (int i=0; i<tarifas.size();i++){
			tarifaTotal+=tarifas.get(i);
			aforoTotal+=aforos.get(i);
			IUv+=tarifas.get(i)*aforos.get(i);			
		}
		IUv/=aforoTotal;
		
		//txtTitulo.setText("Evento: "+nombEvento+ " - Aforo Total: "+aforoTotal);
		txtTitulo.setText("Evento: "+nombEvento);
		
		CF = Float.parseFloat( getIntent().getStringExtra("CostoFijo"));
		CVu = Float.parseFloat( getIntent().getStringExtra("CostoVarUnit"));
		
//		ftAsistMin = Float.parseFloat( getIntent().getStringExtra("AsistMin"));
//		ftAsistMax = Float.parseFloat( getIntent().getStringExtra("AsistMax"));
//		ftAsistMin *= 0.01;
//		ftAsistMax *= 0.01;
		
		ftPrecMin = Float.parseFloat( getIntent().getStringExtra("PrecMin"));
		ftPrecMax = Float.parseFloat( getIntent().getStringExtra("PrecMax"));
		
//		ftPrecMin *= 0.1;
//		ftPrecMax *= 0.1;
		
//		factorA = (ftAsistMax - ftAsistMin);
//		factorA *= 0.1;
		
		factorP = (ftPrecMax - ftPrecMin);
		factorP /= (cantPuntos*1.0);
		
		//Variacion de Tarifa(Precio):
		for (int i= 0; i<cantPuntos+1; i++){			
			PEx = (CF)/(IUv*(ftPrecMin+factorP*i)-CVu);
			yCosto.add(PEx);
			//xCosto.add(IUv*(ftPrecMin+factorP*i));
			xCosto.add(ftPrecMin+factorP*i);
		}
		
		//Agregar recta horizontal de asistencia
		yAsist1.add(yCosto.get(0));
		yAsist1.add(yCosto.get(0));
		xAsist1.add(xCosto.get(0));
		xAsist1.add(xCosto.get(cantPuntos));
		
//		yAsist2.add((float)(yCosto.get(cantPuntos/2)+yCosto.get(cantPuntos/2-1))/2);
//		yAsist2.add((float)(yCosto.get(cantPuntos/2)+yCosto.get(cantPuntos/2-1))/2);
		yAsist2.add(yCosto.get(cantPuntos/2));
		yAsist2.add(yCosto.get(cantPuntos/2));
		xAsist2.add(xCosto.get(0));
		xAsist2.add(xCosto.get(cantPuntos));
		
		yAsist3.add(yCosto.get(cantPuntos));
		yAsist3.add(yCosto.get(cantPuntos));
		xAsist3.add(xCosto.get(0));
		xAsist3.add(xCosto.get(cantPuntos));

		tituloGrafica = "Estimacion de Evento";
		flagTipoReporte = 1;

		VentasN1 ventasGenerales = new VentasN1();
		
		//ventasGenerales.ejecutar(periodo, ventas, tituloGrafica, flagTipoReporte);				
		this.layoutGrafica = (LinearLayout)findViewById(R.id.rptEstimacion);
//		this.mChartView = ChartFactory.getLineChartView(this,ventasGenerales.getDataset(), 
//				ventasGenerales.getmRenderer());
//		mChartView = lg.getIntent(this,x,x,y,y);
		mChartView = lg.getIntent(this,xCosto,yCosto,xAsist1,yAsist1,xAsist2,yAsist2,xAsist3,yAsist3,aforoTotal);
		layoutGrafica.removeAllViews();
		
	    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
		               LayoutParams.FILL_PARENT));
		
	    btnEmail = (Button)findViewById(R.id.btnEmail);
	    btnEmail.setOnClickListener(this);
		//Toast.makeText(this, "Se genera el reporte normal", Toast.LENGTH_LONG).show();
		ImageButton offline = (ImageButton)findViewById(R.id.imgOfflineMode);
        offline.setOnClickListener(this);
        if (Parametros.isOffline_mode()){
        	offline.setVisibility(View.VISIBLE);
        }
	}
	
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		
		if (v.getId()==R.id.btnEmail){
			
			String email = mailPromotor + "," + Parametros.getMail_current_user();
			String subject = "Estimación del evento: " + nombEvento; 
			String body = "";
			
//			for(int i = 0;i<yCosto.size();i++){
//				body +=  String.valueOf(yCosto.get(i)) + "\n";
//			}
			ArrayList<Float> auxCostoPond = new ArrayList<Float>();
			ArrayList<Float> auxPorcAsist = new ArrayList<Float>();
			for (int i=0; i<xCosto.size();i++){
				auxCostoPond.add(xCosto.get(i)*IUv);
				auxPorcAsist.add(yCosto.get(i)*100/aforoTotal);
			}
			body = getContenidoMailVertical(xCosto,auxCostoPond,yCosto,auxPorcAsist);
			
			String emailAddressList[] = {email};
			Intent intent = new Intent(Intent.ACTION_SEND); 
			intent.setType("plain/text");
			intent.putExtra(Intent.EXTRA_EMAIL, emailAddressList);  
			intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
			intent.putExtra(Intent.EXTRA_TEXT, body); 
			ActivityVerEstimacion.this.startActivity(Intent.createChooser(intent, "Seleccione canal de envío"));
			ActivityVerEstimacion.this.finish();
		}
	}
	
	private String getContenidoMail(ArrayList<Float> lstFactorCosto, 
			ArrayList<Float> lstCostoPond,
			ArrayList<Float> lstAsistencia,
			ArrayList<Float> lstPorcAsist) {
		// TODO Auto-generated method stub
		String res="";
		String factorCosto="Factor Costo:\t";
		String costoPond=  "Costo Pond. :\t";
		String asistencia= "Asist (P.E.):\t";
		String porcAsist=  "% Asistencia:\t";
		for (int i=0; i<cantPuntos; i++){
			factorCosto+=String.format("%6.2f",lstFactorCosto.get(i))+"\t\t";
			costoPond+=String.format("%6.2f", lstCostoPond.get(i))+"\t\t";
			asistencia+=String.format("%6.2f", lstAsistencia.get(i))+"\t\t";
			porcAsist+=String.format("%5.2f", lstPorcAsist.get(i))+"%\t\t";
		}
		res = factorCosto+"\n"+costoPond+"\n"+asistencia+"\n"+porcAsist;
		return res;
	}

	private String getContenidoMailVertical(ArrayList<Float> lstFactorCosto, 
			ArrayList<Float> lstCostoPond,
			ArrayList<Float> lstAsistencia,
			ArrayList<Float> lstPorcAsist) {
		// TODO Auto-generated method stub
		//String res="";
		String cabecera = "Análisis de Punto de Equilibrio\n";
		cabecera+="Aforo Total: "+aforoTotal+" personas.\nPrecio de Tarifa Ponderado: S/."+String.format("%.2f",IUv)+"\n";
		cabecera+="Costo Fijo: S/."+String.format("%.2f", CF)+"\nCosto Var. Unitario: S/."+String.format("%.2f",CVu)+"\n\n";
		
		String factorCosto="FactorPrecio|";
		String costoPond=  "PrecioPond|";
		String asistencia= "Asist(P.E.)|";
		String porcAsist=  "%Asistencia\n";
		String body = factorCosto + costoPond + asistencia + porcAsist;
		for (int i=0; i<cantPuntos+1; i++){			
			String auxLin = String.format("%12.2f",lstFactorCosto.get(i))+"\t\t" +
					String.format("%12.2f", lstCostoPond.get(i))+"\t\t" +
					String.format("%12.2f", lstAsistencia.get(i))+"\t\t" +
					String.format("%12.2f", lstPorcAsist.get(i))+"%\n";
			body+=auxLin;
		}
		//res = factorCosto+"\n"+costoPond+"\n"+asistencia+"\n"+porcAsist;
		String Leyenda ="\nLeyenda--------------------------------------------------------\n";
		Leyenda+="  Factor Precio: Rango de Factores elegido por el usuario en los parametros iniciales\n";
		Leyenda+="  Precio Ponderado: (S/.) Producto del valor de la Tarifa Ponderada de las Zonas por el Factor de Precio\n";
		Leyenda+="  Asistencia (P.E.): Valor de Punto de Equilibrio (cant. de asistentes requeridos) para un determinado Precio\n";
		Leyenda+="  % Asistencia: Valor porcentual de la asistencia del P.E. con respecto al Aforo Total del Evento";
				
		return cabecera+body+Leyenda;
	}

	@Override
	public void onRestart(){
		super.onRestart();
		Intent intent = new Intent();
		intent.setClass(this,ActivityVerEstimacion.class);
		startActivity(intent);
		this.finish();
	}
}
